// 最简单的CSV读取器 - 专门针对中文等多字节字符优化

/**
 * 读取CSV文件并返回二维数组 - 针对中文优化版本
 * @param {File|String} filePath - 文件对象或文件路径
 * @return {Array} 二维数组，每行是一个数组
 */
function readCSV(filePath) {
    var file;
    
    // 处理输入参数
    if (!filePath) {
        // 如果没有参数，显示文件选择对话框
        file = File.openDialog("选择CSV文件", "*.csv");
        if (!file) return null;
    } else if (typeof filePath === "string") {
        // 如果是字符串路径
        file = new File(filePath);
    } else {
        // 如果是File对象
        file = filePath;
    }
    
    // 检查文件是否存在
    if (!file || !file.exists) {
        alert("文件不存在: " + (file ? file.name : "未知"));
        return null;
    }

    var data = [];
    
    try {
        // 方案1：尝试直接读取（适用于UTF-8 BOM文件）
        if (file.open("r")) {
            // 不设置编码，让系统自动处理
            var content = file.read();
            file.close();
            
            if (content && content.length > 0) {
                // 处理BOM标记
                if (content.charCodeAt(0) === 65279) { // UTF-8 BOM
                    content = content.substring(1);
                }
                
                // 按行分割
                var lines = content.split(/\r\n|\n|\r/);
                
                for (var i = 0; i < lines.length; i++) {
                    var line = lines[i];
                    if (line.length > 0) {
                        var row = parseCSVLine(line);
                        if (row.length > 0) {
                            data.push(row);
                        }
                    }
                }
                
                if (data.length > 0) {
                    return data;
                }
            }
        }
        
        // 方案2：如果方案1失败，尝试逐行读取
        if (file.open("r")) {
            // 尝试设置为系统默认编码
            try {
                // 在Windows中文系统上，默认编码通常是GBK
                file.encoding = "GBK";
            } catch (e) {
                // 如果GBK不支持，不设置编码
            }
            
            var lineNumber = 0;
            
            // 逐行读取
            while (!file.eof) {
                var line = file.readln();
                lineNumber++;
                
                // 跳过空行
                if (line.length === 0) continue;
                
                // 解析CSV行
                var row = parseCSVLine(line);
                
                // 添加到数据数组
                if (row.length > 0) {
                    data.push(row);
                }
            }
            
            file.close();
        }
        
        // 检查是否读取到数据
        if (data.length === 0) {
            alert("文件为空或没有有效数据");
            return null;
        }
        
        return data;
        
    } catch (e) {
        // 确保文件被关闭
        try {
            file.close();
        } catch (closeError) {}
        
        alert("读取文件时出错: " + e.message);
        return null;
    }
}

/**
 * 简单的trim函数（ExtendScript兼容）
 * @param {String} str - 要处理的字符串
 * @return {String} 去除首尾空格的字符串
 */
function trimString(str) {
    if (!str) return "";
    return str.replace(/^\s+|\s+$/g, "");
}

/**
 * 解析CSV行 - 简化版本，专门处理中文
 * @param {String} line - CSV行字符串
 * @return {Array} 解析后的字段数组
 */
function parseCSVLine(line) {
    if (!line || line.length === 0) return [];
    
    var fields = [];
    var currentField = "";
    var inQuotes = false;
    var i = 0;
    
    while (i < line.length) {
        var currentChar = line.charAt(i);
        
        if (currentChar === '"') {
            if (inQuotes) {
                // 检查是否是转义的引号
                if (i + 1 < line.length && line.charAt(i + 1) === '"') {
                    currentField += '"';
                    i += 2; // 跳过两个引号
                    continue;
                } else {
                    // 结束引号
                    inQuotes = false;
                }
            } else {
                // 开始引号
                inQuotes = true;
            }
        } else if (currentChar === ',' && !inQuotes) {
            // 字段分隔符
            fields.push(trimString(currentField));
            currentField = "";
        } else {
            // 普通字符
            currentField += currentChar;
        }
        
        i++;
    }
    
    // 添加最后一个字段
    fields.push(trimString(currentField));
    
    return fields;
}

/**
 * 显示CSV预览 - 中文优化版本
 * @param {Array} data - CSV数据数组
 * @param {Number} maxRows - 最大显示行数（默认5行）
 */
function showCSVPreview(data, maxRows) {
    if (!data || data.length === 0) {
        alert("没有数据可以预览");
        return;
    }
    
    maxRows = maxRows || 5;
    var previewText = "CSV文件预览（前" + Math.min(maxRows, data.length) + "行）：\n\n";
    
    for (var i = 0; i < Math.min(maxRows, data.length); i++) {
        var row = data[i];
        previewText += "第" + (i + 1) + "行: ";
        
        for (var j = 0; j < row.length; j++) {
            if (j > 0) previewText += " | ";
            previewText += row[j];
        }
        
        previewText += "\n";
    }
    
    if (data.length > maxRows) {
        previewText += "\n... 还有 " + (data.length - maxRows) + " 行数据";
    }
    
    previewText += "\n\n总计: " + data.length + " 行数据";
    
    alert(previewText);
}

/**
 * 测试CSV读取器 - 中文优化版本
 */
function testCSVReader() {
    alert("请选择一个CSV文件进行测试");
    
    var data = readCSV();
    
    if (data) {
        showCSVPreview(data, 3);
        return data;
    } else {
        alert("CSV读取失败或取消");
        return null;
    }
}

// 使用示例：
// var csvData = readCSV("path/to/file.csv");
// var csvData = readCSV(); // 会显示文件选择对话框
// testCSVReader(); // 测试功能